public class Text {
    public int minOperations(int[] nums, int x) {
        //把问题转换成找最长子数组长度 所有元素的和刚好等于 sum-x
        int n = nums.length;
        int sum = 0;
        for (int a : nums) {
            sum += a;
        }
        int target = sum - x;
        if (target < 0) return -1;
        //开始利用双指针滑动窗口  来解决问题
        int left = 0, right = 0, ret = 0, len = -1;  //因为 如果操作不了就返回-1  所以一开始就初始化为-1
        for (; right < n; right++) {
            //进窗口
            ret += nums[right];
            while (ret > target) {  //如果大于了就要出窗口
                ret -= nums[left++];
            }
            //在这里我们要更新结果  这里要等于才能更新
            if (ret == target) {
                len = Math.max(len, right - left + 1);
            }
        }
        if (len == -1) {
            return len;
        } else {
            return n - len;
        }
    }
    public int longestOnes(int[] nums, int k) {
        //其实就是找出 0的个数不超过k的最长子数组
        int n = nums.length,ret = 0;
        for(int left = 0,right = 0,zerocount = 0;right < n; right++) {
            if(nums[right] == 0) zerocount++;
            while(zerocount > k) {
                if(nums[left++] == 0) zerocount--;
            }
            //更新结果
            ret = Math.max(ret,right - left + 1);
        }
        return ret;
    }
    public static void main(String[] args) {

    }
}
